Recent advances in multicore architectures increase the desirability of efficient concurrent programming mechanisms to achieve performance scaling. Concurrent programming techniques, particularly, the conventional mutual exclusion primitives such as monitors and locks, are quite complex, both from the perspective of programming and reasoning. One of the attractive alternative approaches has been the paradigm of concurrent programming without locks. There has been a growing consensus that transactions, the long-time foundations of database systems, should provide a simple, powerful mechanism for synchronization over multiple objects. Sequences of object references can be grouped to form transactions and each such transaction can be treated as an atomic execution unit. Programmers can focus on the atomicity requirements rather than the implementation details of synchronization. These explorations have lead to the abstraction of Transactional Memory (TM). TM systems can be classified as either Software TMs (STMs) or Hardware TMs (HTMs), based on whether data-conflicts are resolved in software or hardware. A Software Transactional Memory (STM) is a concurrency control mechanism that executes multiple concurrent, optimistic, lock-free, atomic transactions, thus alleviating many problems associated with conventional mutual exclusion primitives such as monitors and locks.